<?php
/*
 * @Author: your name
 * @Date: 2020-03-27 11:13:26
 * @LastEditTime: 2020-03-27 11:18:08
 * @LastEditors: Please set LastEditors
 * @Description: In User Settings Edit
 * @FilePath: \applet_api\application\api\controller\Code.php
 */
namespace app\api\controller;
use phpmailer\phpmailer;
use submail\messagexsend;
class Code extends Common {
    public function get_code() {
        $account = $this->params['account'];
        $exist = $this->params['is_exist'];
		$this->get_code_by_account($account, $exist); // 通过邮箱获取验证码
    }

    // 发送code到邮箱
    public function send_code_to_email($email, $code) {
      $toemail = $email;
      $mail = new \PHPMailer\PHPMailer\PHPMailer();
      $mail->isSMTP();
      $mail->CharSet    = 'utf8'; // 设置字符集
      $mail->Host       = 'smtp.qq.com'; // smtp服务器
      $mail->SMTPAuth   = true;
      $mail->Username   = "286986069@qq.com";
      $mail->Password   = "xvwygaknvxibbgie"; // 自己设置的smtp密码, 与登录密码无关
      $mail->SMTPSecure = 'ssl';
      $mail->Port       = 465;
      $mail->setFrom('286986069@qq.com', 'z-blog');
      $mail->addAddress($toemail, 'test');
      $mail->addReplyTo('xujunhao_api@126.com', 'Reply');
      $mail->Subject = "您有新的验证码!"; // 邮件标题
      $mail->Body    = "您的验证码是$code,验证码的有效期为1分钟,本邮件请勿回复!"; // 邮件内容
      if (!$mail->send()) {
          $this->return_msg(400, $mail->ErrorInfo);
      } else {
          $this->return_msg(200, '验证码已经发送成功,请注意查收!');
      }
  }

  // 用过用户名获取code
  public function get_code_by_account($account, $exist) {
    /*********** 检测手机号/邮箱是否存在  ***********/
    $this->check_exist($account, $exist);
    /*********** 检查验证码请求频率 30秒一次  ***********/
    if (session("?" . $account . '_last_send_time')) {
        if (time() - session($account . '_last_send_time') < 30) {
            $this->return_msg(400, '邮箱验证码,每30秒只能发送一次!');
        }
    }
    /*********** 生成验证码  ***********/
    $code = $this->make_code(6);
    /*********** 使用session存储验证码, 方便比对, md5加密   ***********/
    $md5_code = md5($account . '_' . md5($code));
    session($account . '_code', $md5_code);
    /*********** 使用session存储验证码的发送时间  ***********/
    session($account . '_last_send_time', time());
    /*********** 发送验证码  ***********/
	$this->send_code_to_email($account, $code);
  }

  // 生成code 
  public function make_code($num) {
    $max = pow(10, $num) - 1;
    $min = pow(10, $num - 1);
    return rand($min, $max);
  }
}